#!/bin/bash

# ============================================
# AI Agent 后端启动脚本
# ============================================

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$SCRIPT_DIR"

# 配置
BACKEND_PORT=${BACKEND_PORT:-9999}
ENV_FILE="$PROJECT_ROOT/.env"
LOG_DIR="$PROJECT_ROOT/logs"
PID_FILE="$LOG_DIR/agent-backend.pid"

# 创建日志目录
mkdir -p "$LOG_DIR"

# 打印带颜色的消息
print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查依赖
check_dependencies() {
    print_info "检查依赖..."
    
    if ! command -v python3 &> /dev/null; then
        print_error "Python3 未安装"
        exit 1
    fi
    
    print_success "依赖检查完成"
}

# 初始化后端环境
init_backend() {
    print_info "初始化后端环境..."
    
    cd "$PROJECT_ROOT"
    
    # 检查虚拟环境
    if [ ! -d "venv" ]; then
        print_info "创建Python虚拟环境..."
        python3 -m venv venv
    fi
    
    # 激活虚拟环境
    source venv/bin/activate || . venv/Scripts/activate 2>/dev/null || true
    
    # 安装依赖
    if [ -f "requirements.txt" ]; then
        print_info "安装Python依赖..."
        if ! pip install -q -r requirements.txt 2>&1; then
            print_warning "依赖安装失败，可能缺少系统包"
            exit 1
        fi
    fi
    
    # 检查 .env 文件
    if [ ! -f "$ENV_FILE" ]; then
        print_warning ".env 文件不存在，创建默认配置..."
        cat > "$ENV_FILE" << 'ENVEOF'
# OpenAI API配置
OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=

# 环境配置（development 或 production）
ENV=development
ENVEOF
        print_warning "请编辑 .env 文件并配置 OPENAI_API_KEY"
    fi
    
    print_success "后端环境初始化完成"
}

# 启动后端服务
start_backend() {
    print_info "启动后端服务 (端口: $BACKEND_PORT)..."
    
    # 检查是否已运行
    if [ -f "$PID_FILE" ]; then
        local PID=$(cat "$PID_FILE")
        if kill -0 $PID 2>/dev/null; then
            print_warning "后端服务已在运行 (PID: $PID)"
            exit 1
        fi
    fi
    
    init_backend
    
    cd "$PROJECT_ROOT"
    
    # 激活虚拟环境
    source venv/bin/activate || . venv/Scripts/activate 2>/dev/null || true
    
    # 后台启动服务
    nohup uvicorn api:app --host 0.0.0.0 --port $BACKEND_PORT > "$LOG_DIR/backend.log" 2>&1 &
    local PID=$!
    echo $PID > "$PID_FILE"
    
    print_success "后端服务已启动，进程ID: $PID"
    print_info "访问地址: http://localhost:$BACKEND_PORT"
    print_info "API 文档: http://localhost:$BACKEND_PORT/docs"
    print_info "查看日志: tail -f $LOG_DIR/backend.log"
    print_info "停止服务: ./start.sh stop"
}

# 停止后端服务
stop_backend() {
    print_info "停止后端服务..."
    
    # 优先使用 PID 文件停止
    if [ -f "$PID_FILE" ]; then
        local PID=$(cat "$PID_FILE")
        if kill -0 $PID 2>/dev/null; then
            kill $PID 2>/dev/null || true
            sleep 1
            print_success "后端服务已停止 (PID: $PID)"
        else
            print_warning "进程 $PID 不存在"
        fi
        rm -f "$PID_FILE"
    fi
    
    # 备用：使用 pgrep 查找并停止
    if pgrep -f "uvicorn api:app" > /dev/null; then
        pkill -f "uvicorn api:app" || true
        sleep 1
        if pgrep -f "uvicorn api:app" > /dev/null; then
            pkill -9 -f "uvicorn api:app" || true
            print_warning "已强制停止后端服务"
        else
            print_success "后端服务已停止"
        fi
    else
        [ ! -f "$PID_FILE" ] && print_warning "后端服务未运行"
    fi
}

# 主程序
main() {
    local command="${1:-start}"
    
    print_info "AI Agent 后端启动脚本"
    print_info "项目根目录: $PROJECT_ROOT"
    echo ""
    
    # 检查依赖
    check_dependencies
    echo ""
    
    # 执行命令
    case $command in
        start)
            start_backend
            ;;
        stop)
            stop_backend
            ;;
        *)
            print_error "未知命令: $command"
            echo "使用方式: ./start.sh [start|stop]"
            echo "  start  - 启动后端服务（默认）"
            echo "  stop   - 停止后端服务"
            exit 1
            ;;
    esac
}

# 运行主程序
main "$@"
